package com.zhangshanfeng.file;

import java.io.File;
import java.util.HashMap;

/*
### File类练习三【应用】

+ 案例需求

  统计一个文件夹中每种文件的个数并打印

  打印格式如下：

    			txt:3个
    			doc:4个
    			jpg:6个
   			 …
+ 实现步骤

  + 定义一个方法,参数是HashMap集合用来统计次数和File对象要统计的文件夹
  + 遍历File对象,获取它下边的每一个文件和文件夹对象
  + 判断当前File对象是文件还是文件夹
  + 如果是文件,判断这种类型文件后缀名在HashMap集合中是否出现过
    + 没出现过,将这种类型文件的后缀名存入集合中,次数存1
    + 出现过,获取这种类型文件的后缀名出现的次数,对其+1,在存回集合中
  + 如果是文件夹,递归调用自己,HashMap集合就是参数集合,File对象是当前文件夹对象
 */
public class FileDemo06 {
    public static void main(String[] args) {

        File file = new File("E:\\谁谁谁 - 副本");
        HashMap<String,Integer> hm = new HashMap<>();
        getCount(hm,file);
        System.out.println(hm);

        //统计一个文件夹中,每种文件出现的次数.
        //统计 --- 定义一个变量用来统计. ---- 弊端:同时只能统计一种文件
        //利用map集合进行数据统计,键 --- 文件后缀名  值 ----  次数


        //1.定义一个方法,参数是HashMap集合用来统计次数和File对象要统计的文件夹

        //2.遍历File对象,获取它下边的每一个文件和文件夹对象

        //3.判断当前File对象是文件还是文件夹

        //如果是文件,判断这种类型文件后缀名在HashMap集合中是否出现过

        //出现过,获取这种类型文件的后缀名出现的次数,对其+1,在存回集合中

        //这种文件又出现了一次.

        // 没出现过,将这种类型文件的后缀名存入集合中,次数存1

        //如果是文件夹,递归调用自己,HashMap集合就是参数集合,File对象是当前文件夹对象代码实现

    }

    public static void getCount(HashMap<String,Integer> hm,File file){

        File[] files = file.listFiles();
        for (File file1 : files) {
            //如果是文件
            if(file1.isFile()){
                //获得文件名
                String fileEndName = file1.getName();
                String[] split = fileEndName.split("\\.");
                //判断第几次添加
                //如果出现过（不是第一次添加）
                //如果不为空（数组索引为2）
                if(split.length == 2){
                    if(hm.containsKey(split[1])){
                        Integer count = hm.get(split[1]);
                        //值+1再放入
                        count++;
                        hm.put(split[1],count);

                    }else{
                        //第一次添加
                        hm.put(split[1],1);

                    }
                }


            }else {
                //是文件夹(递归遍历)
                getCount(hm,file1);

            }
        }




    }
}
